import axios from 'axios'
// import router from '@/router';
import store from '@/store'
// import { Toast } from 'vant'
// const addErrorLog = errorInfo => {
//   const { statusText, status, request: { responseURL } } = errorInfo
//   let info = {
//     type: 'ajax',
//     code: status,
//     mes: statusText,
//     url: responseURL
//   }
//   // if (!responseURL.includes('save_error_logger')) store.dispatch('addErrorLog', info)
// }

class HTTP {
  // constructor(baseUrl = '') {
  //   this.baseUrl = baseUrl
  //   // this.queue = {}
  // }
  getInsideConfig() {
    // 公共配置
    const config = {
      baseURL: this.baseUrl,
      timeout: 60000
    }
    return config
  }

  // destroy() {
  //   //   delete this.queue[url]
  //   //   if (!Object.keys(this.queue).length) {
  //   //     // Spin.hide()
  //   //   }
  //   Toast.clear()
  // }

  interceptors(instance) {
    // 请求拦截
    instance.interceptors.request.use(
      config => {
        // 添加全局的loading...
        // 不建议开启，因为界面不友好
        // Toast.loading({
        //   message: '加载中...',
        //   duration: 0,
        //   forbidClick: true
        // })
        const token = localStorage.getItem('token')
        // 没有token返回登录页
        // if (!token || token == 'undefined') {
        //   return router.push("/")
        // }
        config.headers['access-token'] = token
        // config.headers = {
        //   'access-token': token
        // }
        return config
      },
      error => {
        return Promise.reject(error)
      }
    )
    // 响应拦截
    instance.interceptors.response.use(
      res => {
        // this.destroy()
        const { data, status } = res
        if (Number(data.status) === 1001) {
          store.commit('setTimeOut', true)
          localStorage.setItem('token', '') // 清空token
          return
        }

        return {
          data,
          status
        }
      },
      error => {
        // this.destroy()
        // let errorInfo = error.response
        store.commit('setHttpErro', true)
        // if (!errorInfo) {
        //   const {
        //     request: {
        //       statusText,
        //       status
        //     },
        //     config
        //   } = JSON.parse(JSON.stringify(error))
        //   errorInfo = {
        //     statusText,
        //     status,
        //     request: {
        //       responseURL: config.url
        //     }
        //   }

        // }
        // addErrorLog(errorInfo)
        return Promise.reject(error)
      }
    )
  }

  request(options) {
    const instance = axios.create()
    options = Object.assign(this.getInsideConfig(), options)
    this.interceptors(instance, options.url)
    return instance(options)
  }
}
export default HTTP
